1. 어플리케이션 패칭
1.1 패칭이란
패칭은 기존 소프트웨어에 수정 사항, 보안 업데이트, 기능 추가 등을 적용하여 소프트웨어의 버전을 업데이트하는 과정을 의미합니다. 패칭을 악의적으로 이용한다면 어플리케이션의 주요 기능등을 우회하거나 본 앱과 유사한 악성코드 앱을 만들어 사용자들에게 배포할 수 있습니다.
1.2 어플리케이션 패칭 취약점
난독화 등
어플리케이션이 패칭에 대한 방어 기법이 존재하지 않아서 패치가 가능하여, 어플리케이션의 주요 기능들을 위/변조 할 수 있다면 취약하다고 할 수 있습니다. 2. 실습
2.1 실습대상
취약한 어플리케이션 실습 모델인
insecurebankv2
를 대상으로 실습 2.2 apktool을 이용한 smail 변환
apktool -d "C:\Users\silmu\Desktop\InsecureBankv2.apk"
2.3 리패키징
해당 코드를 보면 루팅검사 이후 Device not Rooted라는 문자열이 출력 됩니다. 해당 문자열을 루팅 검사의 주요 로직 이라고 생각하고, 변경해보겠습니다.
- 원하는 부분 수정
- 루팅 상태를 나타내는
Device not Rooted!!
라는 문자열이 있음
- 해당 문자열을
jalnik
로 변환
- 빌드
※ 윈도우는 경로 문제인진 모르겠으나 리눅스에서만 빌드가 됨…
# 리패키징 apktool b ./Insecurebankv2 -o InsecureBankPatched.apk # 사이닝 jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore .\signed.jks .\InsecureBankPatched.apk key0 # 재설치 adb install --bypass-low-target-sdk-block .\InsecureBankPatched
- apk파일의 경우 signing을 진행해야만 설치할 수 있기 때문에 서명 또한 해줍니다.
- 서명은 안드로이드 스튜디오에서
build -> Generate Signed Bundle 로 생성합니다.
- 여기서 key0은 만든 키의 이름입니다.
- 확인
Device not Rooted! ➡️ 31337!
3. 대응 방안
3.1 난독화
안드로이드 앱들은 NDK를 사용하여 방어합니다. 여기서 NDK란
C 및 C++와 같은 언어를 사용하여 네이티브 코드로 앱의 일부를 구현할 수 있게 하는 도구 모음입니다.
하지만 소스코드 난독화가 되어 있지 않다면 프로세스를 분석하여 메모리에서 중요한 제어를 조작할 수 있습니다.따라서, 난독화 기술은
클래스,메서드,필드 등의 이름을 악의적인 목적으로 사용하는 것을 방지하여야 합니다.
안드로이드 스튜디오에서는 기본적으로 프로가드
를 제공합니다.3.2 난독화 프로그램 종류
프로가드
프로가드는 자바 코드에서 사용하지 않는 클래스, 필드, 메서드들을 찾은 후 삭제하여 코드 전체의 크기를 줄여주고, 클래스 필드, 메서드 등의 이름을 난독화해주는 오픈소스 프로그램입니다.
빌드시,
MINIFYeNABLED
를 TRUE
로 설정해주면 됩니다.etc
안드로이드 난독화 프로그램 | 주요 기능 |
ProGuard | 코드 축소, 난독화, 최적화, 리소스 압축 |
DexGuard | ProGuard 기능에 더해 클래스 이름, 메서드 이름, 리소스 이름을 무작위 문자열로 바꾸는 등의 추가 보안 기능 |
Allatori | 코드 난독화, 암호화된 스트링과 리소스, 리소스 압축, 리소스 난독화 |
DashO | 코드 축소, 난독화, 암호화된 리소스, 리소스 난독화, 플래그먼트 이동 |
ProGuard + R8 | ProGuard의 난독화 및 최적화 기능과 R8의 향상된 코드 최적화 기능을 결합 |
DexProtector | 코드 난독화, 자동 패치 관리, 암호화된 리소스, 서명 보호, 리소스 압축, 로깅 및 탐지 보호 기능 |